package cn.song.freight.domain.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;

/**
 * 运费计算响应DTO
 *
 * @author SongRenShuo
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(description = "运费计算响应结果")
public class FreightCalculationResponseDTO {

    /**
     * 计算得出的运费（元）
     */
    @ApiModelProperty(value = "计算得出的运费（元）", example = "15.50")
    private BigDecimal freight;

    /**
     * 实际计费重量（kg）- 可能是实重或体积重
     */
    @ApiModelProperty(value = "实际计费重量（kg）", example = "3.0")
    private BigDecimal chargeableWeight;

    /**
     * 货物实际重量（kg）
     */
    @ApiModelProperty(value = "货物实际重量（kg）", example = "2.5")
    private BigDecimal actualWeight;

    /**
     * 体积重量（kg）
     */
    @ApiModelProperty(value = "体积重量（kg）", example = "3.0")
    private BigDecimal volumetricWeight;

    /**
     * 货物体积（m³）
     */
    @ApiModelProperty(value = "货物体积（m³）", example = "0.009")
    private BigDecimal volume;

    /**
     * 使用的运费策略ID
     */
    @ApiModelProperty(value = "使用的运费策略ID", example = "1")
    private Long strategyId;

    /**
     * 使用的运费策略名称
     */
    @ApiModelProperty(value = "使用的运费策略名称", example = "华东区标准运费")
    private String strategyName;

    /**
     * 计费模式：1-首重续重，2-首重续重+重量区间
     */
    @ApiModelProperty(value = "计费模式：1-首重续重，2-首重续重+重量区间", example = "1")
    private Integer pricingModel;

    /**
     * 首重重量（kg）
     */
    @ApiModelProperty(value = "首重重量（kg）", example = "1.0")
    private BigDecimal firstWeightKg;

    /**
     * 首重费用（元）
     */
    @ApiModelProperty(value = "首重费用（元）", example = "10.0")
    private BigDecimal firstWeightFee;

    /**
     * 续重重量（kg）
     */
    @ApiModelProperty(value = "续重重量（kg）", example = "2.0")
    private BigDecimal additionalWeight;

    /**
     * 续重费用（元）
     */
    @ApiModelProperty(value = "续重费用（元）", example = "5.50")
    private BigDecimal additionalWeightFee;

    /**
     * 计算详情说明
     */
    @ApiModelProperty(value = "计算详情说明", example = "首重1kg=10.0元，续重2kg=5.50元，总计15.50元")
    private String calculationDetail;

    /**
     * 是否使用了重量区间规则
     */
    @ApiModelProperty(value = "是否使用了重量区间规则", example = "false")
    private Boolean usedWeightSegment;

    /**
     * 使用的重量区间规则ID（如果适用）
     */
    @ApiModelProperty(value = "使用的重量区间规则ID", example = "1")
    private Long weightSegmentRuleId;

    /**
     * 使用的区域ID
     */
    @ApiModelProperty(value = "使用的区域ID", example = "1")
    private Long areaId;

    /**
     * 抛重比（如6000表示1m³按6000kg计费）
     */
    @ApiModelProperty(value = "抛重比（如6000表示1m³按6000kg计费）", example = "6000")
    private BigDecimal volumetricWeightRatio;
}
